From: Sebastian Keller Date: Wed, 21 Jan 2026 18:50:33 +0000 (+0100) Subject: st/spinner-content: Fix CoglTexture leak X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~39^2~1^2~51 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=ba0c4bda8083b0190ce5e0f38255b6e7b6fcffcf;p=gnome-shell.git st/spinner-content: Fix CoglTexture leak Most of the members were getting indirectly freed via the st_spinner_content_set_actor (spinner, NULL) and the subsequent st_spinner_content_invalidate () on destruction of the actor or changing of its content when the spinner is stopped. The texture however was not freed. This now frees all members explicitly on finalize. 208 (96 direct, 112 indirect) bytes in 1 blocks are definitely lost in loss record 20,960 of 22,464 at 0x4D37833: g_type_create_instance (gtype.c:1877) by 0x4D1C186: g_object_new_internal.part.0 (gobject.c:2666) by 0x4D1E0FA: g_object_new_internal (gobject.c:2982) by 0x4D1E0FA: g_object_new_valist (gobject.c:3004) by 0x4D1E488: g_object_new (gobject.c:2479) by 0x5A8B7CB: _cogl_texture_2d_create_base (cogl-texture-2d.c:84) by 0x572D668: st_spinner_content_paint_content (st-spinner-content.c:175) by 0x50D2C07: clutter_actor_paint_node (clutter-actor.c:3471) by 0x50D2C07: clutter_actor_continue_paint (clutter-actor.c:3726) by 0x511D4F9: clutter_paint_node_paint (clutter-paint-node.c:867) by 0x50D9717: clutter_actor_paint (clutter-actor.c:3670) by 0x574199A: st_viewport_paint (st-viewport.c:483) by 0x50D2C42: clutter_actor_continue_paint (clutter-actor.c:3728) by 0x511D4F9: clutter_paint_node_paint (clutter-paint-node.c:867) Part-of: --- diff --git a/src/st/st-spinner-content.c b/src/st/st-spinner-content.c index 925667c25..810e65463 100644 --- a/src/st/st-spinner-content.c +++ b/src/st/st-spinner-content.c @@ -77,9 +77,23 @@ st_spinner_content_init (StSpinnerContent *spinner) { } +static void +st_spinner_content_finalize (GObject *gobject) +{ + StSpinnerContent *spinner = ST_SPINNER_CONTENT (gobject); + + g_clear_object (&spinner->timeline); + g_clear_object (&spinner->actor); + g_clear_object (&spinner->texture); + g_clear_object (&spinner->buffer); + + G_OBJECT_CLASS (st_spinner_content_parent_class)->finalize (gobject); +} + static void st_spinner_content_class_init (StSpinnerContentClass *klass) { + G_OBJECT_CLASS (klass)->finalize = st_spinner_content_finalize; } static void